#ifndef NGRANDE_H
#define NGRANDE_H

#include <string>

#include "../../TipoDeDato.h"
#include "../../tipos_basicos.h"
#include "../../headermmparametro.h"

extern "C" void restarNGrande(int* a, int* b, int* c, int cantidad);    // c = a -b
extern "C" void sumarNGrande(int* a, int* b, int cantidad);             // a = a + b
extern "C" void negarNGrande(int* a, int cantidad);                     // a = not A (logico)

struct NodoNGrande {
    int cantidad; // cantidad de ints!
    int* dato;
};

class NGrande : implements TipoDeDato {

public:

    NGrande(string& valor,int tamano);
    NGrande(const char* cadena,int tamano);
    NGrande(void* punteroADato);

    virtual void comparar(TipoDeDato& tipoDeDato,ostream& out);

    virtual void* damePunteroAMemoria();

    virtual ClaseDeDato getClass();

    virtual ~NGrande();

    void mostrar(ostream& out); // sacar esto despues!

private:

    bool chequearCaracteres(string& valor,int tamano);
    void construirNGrande(string& valor,int tamano);
    int letraANumero(char letra);
    void mostrar(NodoNGrande* nodo, ostream& out);
    bool esCero(NodoNGrande* nodo);
    bool esNegativo(string& valor);

    NodoNGrande _valor;

};

#endif // NGRANDE_H
